/*!
  @file FileException.cpp
  @brief implements FileException


  Created by Paul Licameli on 11/22/16.

*/

#include "FileException.h"
#include "FileNames.h"

#include "Prefs.h"

FileException::~FileException()
{
}

TranslatableString FileException::ErrorMessage() const
{
    TranslatableString format;
    switch (cause) {
    case Cause::Open:
        format = XO("Audacity failed to open a file in %s.");
        break;
    case Cause::Read:
        format = XO("Audacity failed to read from a file in %s.");
        break;
    case Cause::Write:
        return WriteFailureMessage(fileName);
    case Cause::Rename:
        format
            =XO("Audacity successfully wrote a file in %s but failed to rename it as %s.");
    default:
        break;
    }

    return format.Format(
        FileNames::AbbreviatePath(fileName), renameTarget.GetFullName());
}

wxString FileException::ErrorHelpUrl() const
{
    switch (cause) {
    case Cause::Open:
    case Cause::Read:
        return "Error:_Opening_or_reading_file";
        break;
    case Cause::Write:
    case Cause::Rename:
        return "Error:_Disk_full_or_not_writable";
    default:
        break;
    }

    return "";
}

TranslatableString
FileException::WriteFailureMessage(const wxFileName& fileName)
{
    return XO("Audacity failed to write to a file.\n"
              "Perhaps %s is not writable or the disk is full."
              ).Format(FileNames::AbbreviatePath(fileName));
}
